Wstęp do modelowania GARCH

Generalized Autoregressive Conditional Heteroskedasticity

(Uogólniony Autoregresyjny Model Warunkowej Heteroskedastyczności)

Zmienność

Zmienność - statystyczna miara rozproszenia zwrotów z aktywów w czasie, często ich odchylenie standardowe lub wariancja. Opisuje niepewność dotyczącą potencjalnych wahań cen aktywów wchodzących w skład portfela.

Obliczanie zmienności

df = read_csv('googl.us.txt')['Close']
zwroty_procentowe = df.pct_change()
zmiennosc = zwroty_procentowe.std()
print(zmiennosc)
0.01928121210026225

Zmienność miesięczna:

zmiennosc_miesieczna = zmiennosc*sqrt(21)
print(zmiennosc_miesieczna)
0.08835761393995022

Zmienność roczna:

zmiennosc_roczna = zmiennosc*sqrt(252)
print(zmiennosc_roczna)
0.3060797531590998

Problem z modelowaniem zmienności

Typowym założeniem w modelowaniu szeregów czasowych jest stałość zmienności w czasie. Jednak w danych finansowych często występuje heteroskedastyczność, czyli „różna rozproszenie” — zmienność rośnie lub maleje w sposób systematyczny.

Klastrowanie zmienności

ARCH

  • Auto Regressive Conditional Heteroskedasticity (Uogólniony Autoregresyjny Model Warunkowej Heteroskedastyczności)

  • Robert F. Engle (laureat Nagrody Nobla 2003)

Wprowadzenie do ARCH

Biały szum

Biały szum (ang. White Noise) to proces losowy, w którym:

  • wartości mają średnią równą zero,
  • wariancja jest stała: \(\sigma^2\),
  • brak autokorelacji: obserwacje są niezależne w czasie.

Formalnie:

\[ E(\epsilon_t) = 0 \]

\[ Var(\epsilon_t) = \sigma^2 \]

\[ Cov(\epsilon_t, \epsilon_{t-h}) = 0 \quad \text{dla} \quad h \neq 0 \]

Residua

Resztę modelu (residuum) oznaczamy jako \(\epsilon_t\). Jest to składnik losowy w modelu, który opisuje różnicę pomiędzy wartością rzeczywistą a wartością przewidywaną:

\[ y_t = \hat{y}_t + \epsilon_t \]

gdzie:

  • \(y_t\) — obserwowana wartość w chwili \(t\),
  • \(\hat{y}_t\) — wartość prognozowana przez model,
  • \(\epsilon_t\) — residuum, czyli błąd modelu.

Notacja

Zakładamy, że w chwili \(t\) chcemy przewidzieć zwrot \(r_t\), korzystając z informacji dostępnych do momentu \(t-1\).

Przewidywany zwrot to wartość oczekiwana (średnia) \(\mu_t\), więc model zapisujemy jako:

\[ r_t = \mu_t + \epsilon_t \]

gdzie:

  • \(r_t\) — rzeczywisty zwrot w chwili \(t\),
  • \(\mu_t\) — przewidywany zwrot (średnia) w chwili \(t\),
  • \(\epsilon_t\) — residuum, czyli błąd prognozy.

Podobnie możemy modelować zmienność w chwili \(t\) jako oczekiwaną wariancję na podstawie informacji z momentu \(t-1\).

Zmienność nie jest bezpośrednio obserwowalna, ale jest powiązana z błędem prognozy:

\[ \epsilon_t = \sigma_t z_t \]

gdzie:

  • \(\sigma_t\) — prognozowana zmienność w chwili \(t\),
  • \(z_t\) — losowa zmienna z procesu białego szumu.

Równania modelu ARCH

\[ ARCH(p): \sigma_t^2=\omega+\sum_{i=1}^{p}{\alpha_i\epsilon_{t-i}^2} \]

\[ p \text{ - lag}\]

W skrócie: wariancja to ważona średnia poprzednich residuuów aż do lagu p. Stąd:

\[ ARCH(1): \sigma_t^2=\omega+{\alpha\epsilon_{t-1}^2} \]

Równania modelu GARCH

\[ GARCH(p, q): \sigma_t^2=\omega+\sum_{i=1}^{p}{\alpha_i\epsilon_{t-i}^2} + \sum_{j=1}^{q}{\beta_j\sigma_{t-j}^2} \] Uwzględnia nie tylko kwadraty błędów z przeszłości (jak w ARCH), ale także przeszłe wartości wariancji (\(\sigma^2\)), co pozwala na modelowanie zmienności jako funkcji zarówno błędów, jak i poprzednich wariancji.

\[ GARCH(1, 1): \sigma_t^2=\omega+{\alpha\epsilon_{t-1}^2} + {\beta\sigma_{t-1}^2} \]

Warunki poprawności GARCH(1,1)

  • Wszystkie parametry muszą być nieujemne: \[ \omega \geq 0, \alpha \geq 0, \beta \geq 0 \]
    → zapewnia dodatnią wariancję

  • Musi być spełnione: \[ \alpha + \beta < 1 \]
    → zapewnia powrót do średniej

Wariancja długookresowa

Model:
\[ \sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2 \]

Dla stanu ustalonego (stacjonarność):
\[ E[\sigma_t^2] = E[\sigma_{t-1}^2] = \sigma^2,\quad E[\varepsilon_{t-1}^2] = \sigma^2 \]

Podstawiamy do wzoru:
\[ \sigma^2 = \omega + \alpha \sigma^2 + \beta \sigma^2 \\ \sigma^2 (1 - \alpha - \beta) = \omega \]

Ostatecznie:
\[ \sigma^2 = \frac{\omega}{1 - \alpha - \beta} \]

Dynamika modelu GARCH(1,1)

  • Im większe ( \(\alpha\) ), tym silniejszy natychmiastowy wpływ szoku (reszty, błędu predykcji)

  • Dla ustalonego ( \(\alpha\) ), im większe ( \(\beta\) ), tym dłużej utrzymuje się efekt szoku
    → okresy wysokiej lub niskiej zmienności mają tendencję do utrzymywania się (persistencja)

Intuicja:

  • ( \(\alpha\) ): szybkość reakcji na nowe informacje
  • ( \(\beta\) ): pamięć zmienności

Porównanie

Implementacja w Pythonie

  • Specyfikacja modelu – Zdefiniowanie założeń modelu GARCH (np. wybór rzędu, parametrów).

  • Dopasowanie modelu – Estymacja parametrów modelu na podstawie danych.

  • Prognozowanie – Wykorzystanie dopasowanego modelu do przewidywania przyszłych wartości wariancji lub szoków.

Specyfikacja modelu GARCH

Model GARCH wymaga zdefiniowania kilku kluczowych założeń.

W bibliotece arch w Pythonie sprowadza się to do trzech głównych decyzji:

1. Rozkład reszt

  • Domyślnie: "normal"
  • Inne opcje:
    • "t" – rozkład Studenta
    • "skewt" – skośny rozkład Studenta
    • inne bardziej zaawansowane opcje

2. Model średniej

  • Domyślnie: "constant" – stała średnia
  • Inne możliwości:
    • "zero" – zakłada średnią równą zeru
    • "AR" – model autoregresyjny (np. AR(1), AR(2))

3. Model zmienności

  • Domyślnie: "GARCH" – najczęściej stosowany model zmienności
  • Inne opcje:
    • "ARCH"
    • "EGARCH", "HARCH", "FIGARCH" itd.

Przykładowa specyfikacja

from arch import arch_model
dane = returns
podstawowy_model = arch_model(dane, 
                              p = 1, 
                              q = 1, 
                              mean = 'constant', 
                              vol = 'GARCH', 
                              dist = 'normal')

Dopasowanie modelu

dopasowanie = podstawowy_model.fit(disp='off')
print(dopasowanie.summary())
                     Constant Mean - GARCH Model Results                      
==============================================================================
Dep. Variable:                  Close   R-squared:                       0.000
Mean Model:             Constant Mean   Adj. R-squared:                  0.000
Vol Model:                      GARCH   Log-Likelihood:                8752.21
Distribution:                  Normal   AIC:                          -17496.4
Method:            Maximum Likelihood   BIC:                          -17472.0
                                        No. Observations:                 3332
Date:                śr., kwi 23 2025   Df Residuals:                     3331
Time:                        01:31:30   Df Model:                            1
                                 Mean Model                                 
============================================================================
                 coef    std err          t      P>|t|      95.0% Conf. Int.
----------------------------------------------------------------------------
mu         1.0594e-03  4.025e-04      2.632  8.487e-03 [2.705e-04,1.848e-03]
                              Volatility Model                              
============================================================================
                 coef    std err          t      P>|t|      95.0% Conf. Int.
----------------------------------------------------------------------------
omega      7.4332e-06  1.374e-12  5.409e+06      0.000 [7.433e-06,7.433e-06]
alpha[1]       0.0500  6.518e-03      7.671  1.712e-14 [3.722e-02,6.278e-02]
beta[1]        0.9300  3.844e-03    241.948      0.000     [  0.922,  0.938]
============================================================================

Covariance estimator: robust

Prognozowanie

prognoza = dopasowanie.forecast(horizon = 5)
print(prognoza.variance)
           h.1       h.2       h.3       h.4       h.5
3332  0.000188  0.000192  0.000195  0.000199  0.000202

Zastosowania poza finansami

Modelowanie przepływu rzek

Modelowanie prędkości wiatru

Prognozowanie zmienności cen eksportu upraw

Modelowanie zmienności opini publicznej

Źródła

  1. Learn Heteroskedasticity in 2 minutes
    Dmitry Yemelyanov, Medium.com

  2. White Noise
    Wikipedia, White Noise

  3. Autoregressive conditionalheteroskedasticity
    Wikipedia, Autoregressive conditionalheteroskedasticity

  4. GARCH Model: Definition and Uses in Statistics
    Investopedia, Erika Rasure